/**
 *  Copyright 2011 classic-commerce
 *
 *  Licensed under the Apache License, Version 2.0 (the "License");
 *  you may not use this file except in compliance with the License.
 *  You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 *  Unless required by applicable law or agreed to in writing, software
 *  distributed under the License is distributed on an "AS IS" BASIS,
 *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 *  See the License for the specific language governing permissions and
 *  limitations under the License.
 *
 * This class represents the cart summary widget that displays, at a glance, the
 * basic details of the content of the current cart. It allows the user to see
 * the quantity of items current in the cart and the sub total (without
 * applying the applicable taxes) amount cost of the items.
 *
 */

package ca.ioniq.server.resource.end2end.steps;

import javassist.util.proxy.ProxyFactory;

import org.jbehave.core.annotations.Given;
import org.jbehave.core.annotations.Then;
import org.jbehave.core.annotations.When;

import ca.ioniq.server.builder.CredentialBuilder;
import ca.ioniq.server.builder.UserBuilder;
import ca.ioniq.server.resource.UserResource;
import ca.ioniq.shared.entity.User;

public class ClassicSteps {
	
//	Given an user with the name %userName and a email address %emailAddress that is in repository
//	When the user try to authenticate into the application using password %userPassword 
//	Then the response from application for authentication is %responseValue
	
	static UserResource userResourceClient;
	String response = "false";
	
	static {
		
	    ResteasyProviderFactory providerFactory = ResteasyProviderFactory.getInstance();
	    RegisterBuiltin.register(providerFactory);
	       
	    userResourceClient = ProxyFactory.create(UserResource.class, "http://localhost:9095");	    
	    
	    
		User repositoryUser = UserBuilder.
				anUser().
				withNoId().
				withUserName("Bill").
				withEmail("bill@yahoo.com").
				withCredential(	    		
						CredentialBuilder.aCredential().
		    				withPassword("B111y").
		    				build()).
				build();

		userResourceClient.put(repositoryUser);
	}

	private User user;
	
    @Given("an user with the name %userName and a email address %emailAddress that is in repository")
    public void buildUser(String userName, String emailAddress) {
		user = UserBuilder.
					anUser().
					withNoId().
					withUserName(userName).
					withEmail(emailAddress).
					build();
		

    }
    
    @When("the user try to authenticate into the application using password %userPassword")
    public void authenticateUser(String userPassword) {
    	user.getCredential().setPassword(userPassword);
    	response = userResourceClient.authenticate(user);
    }

    @Then("the response from application for authentication is %responseValue")
    public void verifyAuthentication(String responseValue) {
		assertThat(responseValue, equalTo(response));
    }

}
